home *** CD-ROM | disk | FTP | other *** search
- #
- # Demos for CSG Boolean operations.
- #
- # (c) Gershon Elber, July 1995
- #
-
- comment $
- pause = procedure():
- printf("Press return to continue:", nil());
- $
-
- save_mat = view_mat;
- resolution = 40;
- #
- # Examples of the different Boolean operations.
- #
- view_mat = save_mat * sc( 0.6 );
-
- B = box(vector(-1, -1, -0.25), 2, 2, 0.5);
- color( B, red );
- attrib( B, "dwidth", 2 );
-
- C = cylin(vector(0, 0, -0.5), vector(0, 0, 1), 1.1);
- color( C, magenta );
- attrib( C, "dwidth", 2 );
-
- D = convex(B - C);
- color( D, yellow );
- attrib( D, "dwidth", 4 );
- E = convex(C - B);
- color( E, yellow );
- attrib( E, "dwidth", 4 );
- F = convex(B + C);
- color( F, yellow );
- attrib( F, "dwidth", 4 );
- G = convex(B * C);
- color( G, yellow );
- attrib( G, "dwidth", 4 );
-
- interact( list( view_mat, B, C, D ) );
-
- interact( list( B, C, E ) );
-
- interact( list( B, C, F ) );
-
- interact( list( B, C, G ) );
-
- comment $
-
- interact( D );
-
- interact( E );
-
- interact( F );
-
- interact( G );
-
- $
-
- #
- # A tree of Boolean operations.
- #
- b1 = box(vector(-0.6, -0.3, 0.0), 1.2, 0.6, 0.6);
- c1 = cylin(vector(0.0, -0.25, 0.59), vector(0.0, 0.5, 0.0), 0.55);
- s1 = convex(b1 + c1);
-
- b2 = box(vector(-0.4, -0.4, -0.1), 0.8, 0.8, 0.35);
- s2 = convex(s1 - b2);
-
- c2 = cylin(vector(0.0, -0.4, 0.595), vector(0.0, 0.8, 0.0), 0.3);
- s3 = convex(s2 - c2);
-
- trans_mat = rotz( 40 ) * rotx( -70 ) * scale( vector( 0.3, 0.3, 0.3 ) );
- Obj = list( b1 * trans_mat * trans( vector( -0.7, -0.9, 0.0 ) ),
- c1 * trans_mat * trans( vector( -0.1, -0.9, 0.0 ) ),
- s1 * trans_mat * trans( vector( -0.4, -0.3, 0.0 ) ),
- b2 * trans_mat * trans( vector( 0.2, -0.3, 0.0 ) ),
- s2 * trans_mat * trans( vector( -0.1, 0.3, 0.0 ) ),
- c2 * trans_mat * trans( vector( 0.5, 0.3, 0.0 ) ),
- s3 * trans_mat * trans( vector( 0.2, 0.9, 0.0 ) ) );
- attrib( Obj, "dwidth", 4 );
-
- edge2d = function( x1, y1, x2, y2 ):
- return = ctlpt( E2, x1, y1 ) + ctlpt( E2, x2, y2 );
-
- Lines = list( edge2d( -0.6, -0.65, -0.5, -0.4 ),
- edge2d( -0.2, -0.55, -0.3, -0.35 ),
- edge2d( -0.3, 0.05, -0.25, 0.2 ),
- edge2d( 0.1, -0.16, -0.05, 0.25 ),
- edge2d( 0.0, 0.65, 0.1, 0.8 ),
- edge2d( 0.4, 0.6, 0.3, 0.85 ) );
- attrib( Lines, "dwidth", 2 );
-
- All = list( Lines, Obj ) * scale( vector( 0.7, 0.7, 0.7 ) );
- view_mat = rotx( 0 );
- interact( list( view_mat, All ) );
-